import axios from "axios";
import {ElMessage} from "element-plus";
import router from "@/router";
import { useRouter } from 'vue-router'
import { useUserInfoStore } from '@/stores/userInfo';
//{baseURL: '/api'}

const request = axios.create({
  baseURL: '', // 关键：设为空字符串，不额外添加路径
  timeout: 5000,
  headers: { 'Content-Type': 'application/json' }
});

// 请求拦截器：添加 Token 到 Header
request.interceptors.request.use(
  (config) => {
    // 直接从 localStorage 读取，避免 Pinia 尚未初始化
    const userStr = localStorage.getItem('userInfo');
    const token = userStr ? JSON.parse(userStr).token : null;
    console.log('localStorage userInfo:', userStr);
    console.log('要设置的Authorization:', token ? `Bearer ${token}` : '无');
    console.log('当前请求URL:', config.url);
    
    if (token) {
      // 按后端要求的格式携带 Token（通常是 Bearer 前缀）
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器：处理 Token 无效/过期
request.interceptors.response.use(
  (response) => {
    return response; // 正常响应直接返回
  },
  (error) => {
    const router = useRouter();
    const userInfoStore = useUserInfoStore();
    const status = error.response?.status;

    // 处理 401（Token 无效/过期）
    if (status === 401) {
      // 清除本地 Token 和用户信息
      userInfoStore.logout(); // 调用 Pinia 中的 logout 方法（清除 localStorage）
      // 跳转到登录页，并记录当前页面路径（登录后可返回）
      router.push({
        path: '/login',
        query: { redirect: router.currentRoute.value.fullPath },
      });
      ElMessage.error('登录已过期，请重新登录');
    } else if (status === 403) {
      ElMessage.error('没有权限访问');
    } else {
      ElMessage.error('请求失败：' + (error.response?.data?.message || '网络错误'));
    }
    return Promise.reject(error);
  }
);

export default request;
